package javase.javase02.thread;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @author: Gan
 * @date 2021/4/21 0021 15:36
 * @description: 2.用多线程代码来模拟，迅雷用3个线程下载100M资源的的过程。
 * 每个线程每次，一次下载1兆(M)资源，直到下载完毕，即剩余的待下载资源大小为0
 * (用一个整数表示资源大小，每次个线程每次下载多少兆(M), 剩余待下载资源就减少多少兆(M)，
 * 模拟我们售票的代码实现，考虑多线程的数据安全问题)
 **/
public class Day20Work2 {
    public static void main(String[] args) {
        DownloadSrc dl = new DownloadSrc();
        Thread t1 = new Thread(dl);
        Thread t2 = new Thread(dl);
        Thread t3 = new Thread(dl);
        t1.setName("t1线程");
        t2.setName("t2线程");
        t3.setName("t3线程");
        t1.start();
        t2.start();
        t3.start();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(simpleDateFormat.format(new Date()));
    }
}

//实现Runnable接口
class DownloadSrc implements Runnable {
    int src = 100;

    @Override
    public void run() {
        while (true) {
            synchronized (this) {
                if (src > 0) {
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    src--;
                    if (src == 0) {
                        System.out.println("资源已经全部下载完成。");
                        return;
                    }
                    System.out.println(Thread.currentThread().getName() + (100 - src) + "M下载完成。还剩" + src + "M资源没下。");
                } else {
                    break;
                }
            }
        }
    }
}